package com.example.day3.exercise;


import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

/**
 * 二维流扁平映射
 */
public class Exercise5 {
    public static void main(String[] args) {
        // 创建二维数据结构：每个省份包含多个城市
        List<Province> provinces = Arrays.asList(
                new Province("陕西省", Arrays.asList("西安市", "宝鸡市", "咸阳市")),
                new Province("北京市", Arrays.asList("朝阳区", "海淀区", "昌平区")),
                new Province("上海市", Arrays.asList("浦东新区", "静安区", "徐汇区"))
        );

        System.out.println("=== 方法1: 使用 flatMap 展平 ===");
        // 将二维结构扁平化为一维流，获取所有城市名
        List<String> allCities = provinces.stream()
                .flatMap(province -> province.cities().stream())
                .toList();

        allCities.forEach(System.out::println);

        System.out.println("\n=== 方法2: 展平并加上省份信息 ===");
        // 展平并创建带省份信息的城市列表
        provinces.stream()
                .flatMap(province ->
                        province.cities().stream()
                                .map(city -> province.name() + " - " + city)
                )
                .forEach(System.out::println);

        System.out.println("\n=== 方法3: 使用 Stream.of 和 flatMap ===");
        // 直接使用 Stream.of 创建二维流
        Stream.of(
                        Arrays.asList("苹果", "香蕉", "橙子"),
                        Arrays.asList("白菜", "萝卜", "青菜"),
                        Arrays.asList("牛肉", "猪肉", "鸡肉")
                )
                .flatMap(List::stream)  // 展平为一维流
                .forEach(System.out::println);
    }

    // 省份记录类
    record Province(String name, List<String> cities) {
    }
}
